const User = require('../models/user.model');
const fs = require('fs');
const path = require('path');
const { validationResult } = require('express-validator');

// 获取用户个人资料
exports.getProfile = async (req, res) => {
  try {
    const user = await User.findById(req.userId).select('-password');
    if (!user) {
      return res.status(404).json({ success: false, message: '用户不存在' });
    }
    res.json({ success: true, user });
  } catch (error) {
    console.error('获取用户资料失败:', error);
    res.status(500).json({ success: false, message: '服务器错误' });
  }
};

// 更新用户个人资料
exports.updateProfile = async (req, res) => {
  try {
    const { username, email, bio } = req.body;

    // 验证用户名和邮箱是否已被其他用户使用
    const existingUser = await User.findOne({
      $and: [
        { _id: { $ne: req.userId } },
        { $or: [{ username }, { email }] }
      ]
    });

    if (existingUser) {
      return res.status(400).json({
        success: false,
        message: '用户名或邮箱已被使用'
      });
    }

    // 更新用户信息
    const updatedUser = await User.findByIdAndUpdate(
      req.userId,
      { username, email, bio },
      { new: true, runValidators: true }
    ).select('-password');

    if (!updatedUser) {
      return res.status(404).json({
        success: false,
        message: '用户不存在'
      });
    }

    res.json({
      success: true,
      message: '个人资料更新成功',
      user: updatedUser
    });
  } catch (error) {
    console.error('更新用户资料失败:', error);
    if (error.name === 'ValidationError') {
      return res.status(400).json({
        success: false,
        message: '验证失败',
        errors: Object.values(error.errors).map(err => err.message)
      });
    }
    res.status(500).json({
      success: false,
      message: '服务器错误'
    });
  }
};

// 上传用户头像
exports.uploadAvatar = async (req, res) => {
  try {
    if (!req.file) {
      return res.status(400).json({
        success: false,
        message: '请选择要上传的头像'
      });
    }

    const user = await User.findById(req.userId);
    if (!user) {
      // 删除上传的文件
      fs.unlinkSync(req.file.path);
      return res.status(404).json({
        success: false,
        message: '用户不存在'
      });
    }

    // 如果用户之前有头像，删除旧头像文件
    if (user.avatar) {
      const oldAvatarPath = path.join(__dirname, '../../uploads/avatars', path.basename(user.avatar));
      if (fs.existsSync(oldAvatarPath)) {
        fs.unlinkSync(oldAvatarPath);
      }
    }

    // 更新用户头像路径
    const avatarUrl = `/uploads/avatars/${req.file.filename}`;
    const updatedUser = await User.findByIdAndUpdate(
      req.userId,
      { avatar: avatarUrl },
      { new: true }
    ).select('-password');

    res.json({
      success: true,
      message: '头像上传成功',
      user: updatedUser
    });
  } catch (error) {
    console.error('上传头像失败:', error);
    // 删除上传的文件
    if (req.file) {
      fs.unlinkSync(req.file.path);
    }
    res.status(500).json({
      success: false,
      message: '服务器错误'
    });
  }
};